//必须引入的RecordApp核心文件（文件路径是 /src/app-support/app.js）。注意：app.js会自动往window（浏览器环境）或Object（非浏览器环境）下挂载名称为RecordApp对象，全局可调用RecordApp
// import Recorder from "recorder-core";
// import "recorder-core/src/engine/wav";
import "recorder-core/recorder.wav.min";
import "recorder-core/src/extensions/waveview";
import RecordApp from "recorder-core/src/app-support/app";
import "@/Recorder-UniCore/app-uni-support.js";

export function requestPermission(success, next) {
  RecordApp.RequestPermission(
    
    function () {
      //注意：有使用到H5录音时，为了获得最佳兼容性，建议RequestPermission、Start至少有一个应当在用户操作（触摸、点击等）下进行调用
      success && success();
    },
    function (msg, isUserNotAllow) {
    
      //用户拒绝未授权或不支持
      next && next(msg, isUserNotAllow);
      console.log((isUserNotAllow ? "UserNotAllow，" : "") + "无法录音:" + msg);
    }
  );
}
export function soundStart(success) {
  //开始录音的参数和Recorder的初始化参数大部分相同
  RecordApp.Start(
    {
      type: "wav",
      sampleRate: 16000,
      //   bitRate: 16, //mp3格式，指定采样率hz、比特率kbps，其他参数使用默认配置；注意：是数字的参数必须提供数字，不要用字符串；需要使用的type类型，需提前把格式支持文件加载进来，比如使用wav格式需要提前加载wav.js编码引擎
      onProcess: function (
        buffers,
        powerLevel,
        bufferDuration,
        bufferSampleRate,
        newBufferIdx,
        asyncEnd
      ) {
        //录音实时回调，大约1秒调用12次本回调，buffers为开始到现在的所有录音pcm数据块(16位小端LE)
        //可实时上传（发送）数据，可实时绘制波形，ASR语音识别，使用可参考Recorder
      },

      //...  不同环境的专有配置，根据文档按需配置
    },
    function () {
      //开始录音成功
     
      success && success();
    },
    function (msg) {
      console.log("开始录音失败：" + msg);
    }
  );
}

/**停止录音，清理资源**/

export function soundEnd(success, fail) {
  RecordApp.Stop(
    function (arrayBuffer, duration, mime) {
      //arrayBuffer就是录音文件的二进制数据，不同平台环境下均可进行播放、上传
      console.log(arrayBuffer, mime, "时长:" + duration + "ms");

      //如果当前环境支持Blob，也可以直接构造成Blob文件对象，和Recorder使用一致
      if (typeof Blob != "undefined" && typeof window == "object") {
        var blob = new Blob([arrayBuffer], { type: mime });
        const soundInfo = {
          arrayBuffer,
          mime,
          duration,
          filePath: (window.URL || webkitURL).createObjectURL(blob),
        };
        success(soundInfo, blob);
      }
    },
    function (msg) {
      console.log("录音失败:" + msg);
      fail(msg);
    }
  );
}
